package com.example.rockscissorspapergame.utils;

import com.example.rockscissorspapergame.Constants;
import com.example.rockscissorspapergame.ResourceTable;
import ohos.agp.components.element.Element;
import ohos.agp.components.element.PixelMapElement;
import ohos.app.Context;
import ohos.global.resource.Resource;

/**
 * GameUtils 游戏规则相关的工具方法类
 */
public class GameUtils {

    /**
     * 获取比赛结果，根据双方出拳的武器，判定结果
     * 规则是：石头克剪刀，剪刀克布，布克石头
     *
     * @param mainWeapon   主机端出拳的武器
     * @param remoteWeapon 远程端出拳的武器
     * @return 比赛结果，主机端胜利、远程端胜利、平局
     */
    public static String getGameResult(String mainWeapon, String remoteWeapon) {
        if (isTextEmpty(mainWeapon) || isTextEmpty(remoteWeapon)) {
            // 一方未出拳，无结果
            return Constants.DOUBLE_LINE_STRING;
        } else if (mainWeapon.equals(remoteWeapon)) {
            // 双方出拳相同，平局
            return Constants.GAME_RESULT_NO_WINNER;
        } else if (mainWeapon.equals(Constants.GAME_WEAPON_ROCK)) {
            // 主机端出石头
            if (remoteWeapon.equals(Constants.GAME_WEAPON_SCISSORS)) {
                // 远程端出剪子，主机端胜利
                return Constants.GAME_RESULT_MAIN_WIN;
            } else if (remoteWeapon.equals(Constants.GAME_WEAPON_PAPER)) {
                // 远程端出布，远程端胜利
                return Constants.GAME_RESULT_REMOTE_WIN;
            }
        } else if (mainWeapon.equals(Constants.GAME_WEAPON_SCISSORS)) {
            // 主机端出剪子
            if (remoteWeapon.equals(Constants.GAME_WEAPON_ROCK)) {
                // 远程端出石头，远程端胜利
                return Constants.GAME_RESULT_REMOTE_WIN;
            } else if (remoteWeapon.equals(Constants.GAME_WEAPON_PAPER)) {
                // 远程端出布，主机端胜利
                return Constants.GAME_RESULT_MAIN_WIN;
            }
        } else if (mainWeapon.equals(Constants.GAME_WEAPON_PAPER)) {
            // 主机端出布
            if (remoteWeapon.equals(Constants.GAME_WEAPON_ROCK)) {
                // 远程端出石头，主机端胜利
                return Constants.GAME_RESULT_MAIN_WIN;
            } else if (remoteWeapon.equals(Constants.GAME_WEAPON_SCISSORS)) {
                // 远程端出剪子，远程端胜利
                return Constants.GAME_RESULT_REMOTE_WIN;
            }
        }
        return Constants.GAME_RESULT_NO_WINNER;
    }

    /**
     * 获取武器图片资源
     * 从 resources 目录中读取武器图片到 element 对象
     *
     * @param context 上下文对象
     * @param weapon  武器名
     * @return 武器图片 element 对象
     */
    public static Element getWeaponElement(Context context, String weapon) {
        switch (weapon) {
            case Constants.GAME_WEAPON_ROCK:
                return GameUtils.getImageElement(context, ResourceTable.Media_icon_rock);
            case Constants.GAME_WEAPON_SCISSORS:
                return GameUtils.getImageElement(context, ResourceTable.Media_icon_scissors);
            case Constants.GAME_WEAPON_PAPER:
                return GameUtils.getImageElement(context, ResourceTable.Media_icon_paper);
            default:
                return null;
        }
    }

    /**
     * 从 resources 目录中读取图片到 element 对象
     *
     * @param context 上下文
     * @param resId   图片资源 ID
     * @return element 对象
     */
    public static PixelMapElement getImageElement(Context context, int resId) {
        try {
            Resource resource = context.getResourceManager().getResource(resId);
            return new PixelMapElement(resource);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 判断字符串对象是否为 null 或空字符串
     *
     * @param text 可能为 null 的字符串对象
     * @return true - 为 null 或空, false - 字串不为 null 且有字
     */
    public static boolean isTextEmpty(String text) {
        return null == text || text.isEmpty();
    }
}
